package dbexp.utils;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;

/**
 * Dostarczająca obsługę komunikatów niezależnych od języka
 */
public enum Message {
	dbexp_model_index,
	;
	
	private static ResourceBundle rb;
	private static final MessageFormat mf = new MessageFormat("");
	private static final Locale locale = Locale.getDefault();
	private static final String MISSING = "missing param: ";
	static{
		refresh();
	}
	/**
	 * Pobiera treść komunikatu dla którego kluczem jest <code>name</code>
	 * @param name klucz komunikatu
	 * @return treść komunikatu lub missing param jeżeli brak treści
	 */
	private static String get(String name){
		if(!locale.equals(Locale.getDefault())){
			refresh();
		}
		if(rb!=null && rb.containsKey(name)){
			return rb.getString(name);
		}
		return MISSING + name;
	}
	/**
	 * Zaczytuje treści komunikatów z pliku message.properties
	 */
	private static void refresh(){
		try{
			rb = ResourceBundle.getBundle(System.getProperty("message", "dbexp.utils.message"));
		}catch(Exception e){e.printStackTrace();}
	}
	boolean exists(){
		return rb != null && rb.containsKey(name().replaceAll("_", "."));
	}
	@Override
	public String toString() {
		return get(name().replaceAll("_", "."));
	}
	/**
	 * Formatuje treść komunikatu według wartości parametrów
	 * @param params parametry dla kumunikatu
	 * @return sformatowana treść komunikatu lub missing param jeżeli brak treści
	 * @see java.text.MessageFormat#format(String, Object...)
	 */
	public String format(Object... params){
		mf.applyPattern(toString());
		return mf.format(params);
	}
}
